package com.study.util;

import java.util.Calendar;

import org.springframework.stereotype.Component;



/**
 * 生成年月日加字母编号
 * @author msi-
 *
 */
@Component
public class MaxId {
	
	public static void main(String[] args) {
		MaxId dBalances = new MaxId();
		dBalances.generateNewOrderID("SELECT MAX(order_sn) from jc_shop_order");
	}

	/**
	 * 生成新的订单编号
	 * 第一个参数是查询那个表中最大id
	 */
	public static String generateNewOrderID(Object maxid) {
		//生成订单编号的算法：
		int year, month, day;
		Calendar c;
		int seq;				//序号
		String maxOID = null;	//最大历史订单编号
		String newOID = null;	//新的订单编号
		
		//（1）获取当前年（最后两位）year、月month、日day的值；	
		c = Calendar.getInstance();
		year = c.get(Calendar.YEAR) % 100;			//获得年的最后两位
		month = c.get(Calendar.MONTH) + 1;			//获得月
		day = c.get(Calendar.DAY_OF_MONTH);			//获得日
		
		//（2）查询最大历史订单编号；
		Object ret = maxid;
		if(ret != null) {
			maxOID = ret.toString();
		}
		
		
		if(maxOID == null) {//（3.1）最大历史订单编号不存在
			seq = 1;		//序号=1
		}else {				//（3.2）最大历史订单编号存在
			if(Integer.valueOf(maxOID.substring(0, 2)) == year
			&& Integer.valueOf(maxOID.substring(2, 4)) == month
			&& Integer.valueOf(maxOID.substring(4, 6)) == day) {//（3.2.1）最大历史订单编号是当天产生
				//序号=最大历史订单编号的序号+1
				seq = Integer.valueOf(maxOID.substring(6)) + 1;
			}
			else {				//（3.2.2）最大历史订单编号非当天产生
				//序号=1
				seq = 1;
			}
		}
		//新订单编号=year+month+day+序号
		//newOID = year + "" + month + "" + day + "" + seq;
		newOID = "" + (year < 10 ? "0" + year : year);
		newOID += (month < 10 ? "0" + month : month);
		newOID += (day < 10 ? "0" + day : day);
		
		if(seq < 10) {
			newOID += "000" + seq;
		}
		else if(seq < 100) {
			newOID += "00" + seq;
		}
		else if(seq < 1000) {
			newOID += "0" + seq;
		}
		else {
			newOID += seq;
		}
		
		System.out.println(newOID);
		return newOID;
	}
	
	/**
	 * 生成新的订单编号
	 * 第一个参数是查询那个表中最大id
	 */
	public static String generateNewOrderID2(Object maxid) {
		//生成订单编号的算法：
		int year, month, day;
		Calendar c;
		int seq;				//序号
		String maxOID = null;	//最大历史订单编号
		String newOID = null;	//新的订单编号
		
		//（1）获取当前年（最后两位）year、月month、日day的值；	
		c = Calendar.getInstance();
		year = c.get(Calendar.YEAR) ;			//获得年的最后两位
		month = c.get(Calendar.MONTH) + 1;			//获得月
		day = c.get(Calendar.DAY_OF_MONTH);			//获得日
		
		//（2）查询最大历史订单编号；
		Object ret = maxid;
		if(ret != null) {
			maxOID = ret.toString();
		}
		
		
		if(maxOID == null) {//（3.1）最大历史订单编号不存在
			seq = 1;		//序号=1
		}else {				//（3.2）最大历史订单编号存在
			if(Integer.valueOf(maxOID.substring(0, 4)) == year
			&& Integer.valueOf(maxOID.substring(4, 6)) == month
			&& Integer.valueOf(maxOID.substring(6, 8)) == day) {//（3.2.1）最大历史订单编号是当天产生
				//序号=最大历史订单编号的序号+1
				seq = Integer.valueOf(maxOID.substring(8)) + 1;
			}
			else {				//（3.2.2）最大历史订单编号非当天产生
				//序号=1
				seq = 1;
			}
		}
		//新订单编号=year+month+day+序号
		//newOID = year + "" + month + "" + day + "" + seq;
		newOID = "" + (year < 10 ? "0" + year : year);
		newOID += (month < 10 ? "0" + month : month);
		newOID += (day < 10 ? "0" + day : day);
		
		if(seq < 10) {
			newOID += "0" + seq;
		}
		else {
			newOID += seq;
		}
		
		System.out.println(newOID);
		return newOID;
	}
	
}
